package io.hilo.example.demo.metric;

import org.springframework.stereotype.Service;

import org.hilo.boot.core.UT;
import org.hilo.boot.core.spring.AsyncRunAfterStart;
import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.MeterRegistry;

/**
 * Summary(摘要)用于跟踪事件的分布。它类似于一个计时器，但更一般的情况是，它的大小并不一定是一段时间的测量值。
 * 在micrometer中，对应的类是DistributionSummary，它的用法有点像Timer，
 * 但是记录的值是需要直接指定，而不是通过测量一个任务的执行时间。
 * @author zollty
 * @since 2020年9月17日
 */
@Service
public class SummaryService implements AsyncRunAfterStart {
    DistributionSummary summary;
    
    public SummaryService(MeterRegistry registry) {
        summary = DistributionSummary.builder("app.summary")
                .tag("app.tag.summary", "summarySample")
                .description("summary sample test")
                .register(registry);
    }
    
    @Override
    public void doInit(Object[] args) {
        
//        DistributionSummary summary = DistributionSummary.builder("app.summary")
//                .tag("app.tag.summary", "summarySample")
//                .description("summary sample test")
//                .register(new SimpleMeterRegistry());
 
        for (int i = 1; i < 1000; i++) {
            UT.Thread.sleepThread(1000);
            summary.record(i);
        }
 
        System.out.println(summary.count());
        System.out.println(summary.measure());
        System.out.println(summary.max());
        System.out.println(summary.mean());
        System.out.println(summary.totalAmount());
    }

}
